#include "socket_serve.h"       //服务端

struct socket_fd fd_data; //保存文件句柄

int socket_init()          
{
  // 第1步：创建服务端的socket。
  int iSocketFD = 0;    //socket句柄
  socklen_t socklen = 0;  	
  struct sockaddr_in servaddr;           //服务端地址信息的数据结构。
  struct sockaddr_in clientaddr;         // 客户端的地址信息。

  if ( (fd_data.listenfd = socket(AF_INET,SOCK_STREAM,0))==-1) 
  {
     perror("socket");
     return -1; 
  }
  // 第2步：把服务端用于通信的地址和端口绑定到socket上。
  memset(&servaddr,0,sizeof(servaddr));          //清除变量内容
  servaddr.sin_family = AF_INET;                 //协议族，在soc  ket编程中只能是AF_INET。
  servaddr.sin_addr.s_addr = htonl(INADDR_ANY);  // 任意ip地址。所有的ip地址都可以链接该服务
  servaddr.sin_port = htons(SER_PORT);           // 指定通信端口。
  if (bind(fd_data.listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) != 0 )
  {
    perror("bind"); 
    close(fd_data.listenfd); 
    return -1; 
  }
 
  // 第3步：把socket设置为监听模式。
  if (listen(fd_data.listenfd,5) != 0 ) 
  { 
    perror("listen"); 
    close(fd_data.listenfd); 
    return -1; 
  }
  // 第4步：接受客户端的连接。
  fd_data.clientfd=accept(fd_data.listenfd,(struct sockaddr *)&clientaddr,(socklen_t*)&socklen);//等待客户端的连接
  printf("客户端（%s）已连接。\n",inet_ntoa(clientaddr.sin_addr));
  return 0;
}
  // 第5步：与客户端通信，接收客户端发过来的报文后，回复ok。
void socket_send(char *send_buffer,int cont)
{
    printf("socket_send\n");
    char Recv_Length[]="size=";  
    char buffer[10];
    char buff[5];
    sprintf(buffer,"%s%d\n",Recv_Length,cont);//拼接字符串与数字
    printf("%s",buffer);//buffer就是合并后的字符串。
    send(fd_data.clientfd,buffer,10,0);//发送先头数据
   
    read(fd_data.clientfd,buff,sizeof(buff));
    printf("接收回应：%s\n",buff);
    if(strstr(buff,"ack!")!=NULL){
      send(fd_data.clientfd,send_buffer,cont,0);
      printf("发送：%s %d\n",send_buffer,cont);
    }
    usleep(10);
}
 
  // 第6步：关闭socket，释放资源。

  void socket_close()
{
  printf("socket_close\n");
  close(fd_data.listenfd); 
  close(fd_data.clientfd);
}

